package logica;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.ArrayList;
import logica.excepctions.CodigoIncorrectoException;
import logica.excepctions.JugadorNoExistenteException;
import logica.excepctions.JugadorYaRegistradoException;
import logica.excepctions.NoHayPartidasException;
import logica.excepctions.NoHayPeliculasDisponiblesException;
import logica.excepctions.PartidaEnCursoException;
import logica.excepctions.PartidaFinalizadaException;
import logica.excepctions.PeliculaExistenteException;
import logica.excepctions.PersistenciaException;
import logica.excepctions.LetraIngresadaException;
import ValueObjects.VOJugador;
import ValueObjects.VOJugadorRanking;
import ValueObjects.VOPartida;
import ValueObjects.VOPelicula;

public interface IFachada extends Remote{

    public void registrarPelicula(String titulo, String descripcion) throws RemoteException, PeliculaExistenteException;

	public VOPelicula[] listarPeliculas()throws RemoteException;

	public void registrarJugador(String nombre, String codigo) throws RemoteException, JugadorYaRegistradoException;
	
	public VOJugador[] listarJugadores()throws RemoteException;
	
	public VOPartida[] listarPartidasJugador(String nombre) throws RemoteException, JugadorNoExistenteException, NoHayPartidasException;
	
	public void guardarCambios() throws RemoteException, PersistenciaException, FileNotFoundException, IOException;

	public void loguearseParaJugar(String nombre, String codigo) throws RemoteException, JugadorNoExistenteException, CodigoIncorrectoException;

	public void iniciarPartida(String nombre, String codigo) throws RemoteException, CodigoIncorrectoException, JugadorNoExistenteException, PartidaEnCursoException, NoHayPeliculasDisponiblesException;
	
	public VOPartida visualizarPartida(String nombre, String codigo) throws RemoteException, CodigoIncorrectoException, JugadorNoExistenteException, NoHayPartidasException;
	
	public void ingresarLetra(String nombre, String codigo,char letra) throws RemoteException, CodigoIncorrectoException, JugadorNoExistenteException,LetraIngresadaException, PartidaEnCursoException, NoHayPartidasException, PartidaFinalizadaException;
				
	public boolean arriesgarPelicula(String nombre, String codigo,String pelicula) throws RemoteException, CodigoIncorrectoException, JugadorNoExistenteException, PartidaEnCursoException, NoHayPartidasException, PartidaFinalizadaException;
	
	public ArrayList<VOJugadorRanking> listarRanking() throws RemoteException;

}
